package Q7_01_Deck_of_Cards;
import java.util.ArrayList;
import CtCILibrary.AssortedMethods;
public class Deck <T extends Card> {
private ArrayList<T> cards;
private int dealtIndex = 0; // marks first undealt card
public Deck() {
}
public void setDeckOfCards(ArrayList<T> deckOfCards) {
cards = deckOfCards;
}
public void shuffle() {
for (int i = 0; i < cards.size(); i++) {
int j = AssortedMethods.randomIntInRange(i, cards.size() - i - 1);
T card1 = cards.get(i);
T card2 = cards.get(j);
cards.set(i, card2);
cards.set(j, card1);
}
}
public int remainingCards() {
return cards.size() - dealtIndex;
}
public T[] dealHand(int number) {
if (remainingCards() < number) {
return null;
}
T[] hand = (T[]) new Card[number];
int count = 0;
while (count < number) {
T card = dealCard();
if (card != null) {
hand[count] = card;
count++;
}
}
return hand;
}
public T dealCard() {
if (remainingCards() == 0) {
return null;
}
T card = cards.get(dealtIndex);
card.markUnavailable();
dealtIndex++;
return card;
}
public void print() {
for (Card card : cards) {
card.print();
}
}
}